import java.util.ArrayList;
import java.util.List;

import dao.PersonDao;
import dao.UserDao;
import dao.impl.PersonDaoImpl;
import dao.impl.UserDaoImpl;
import pojo.Person;
import pojo.User;

/**
 * mybatis： 官方文档：https://mybatis.org/mybatis-3/zh/index.html Api:
 * https://mybatis.org/mybatis-3/zh/java-api.html SqlSession 方法:
 * SELECT、INSERT、UPDATE 、 DELETE、selectOne 、clearCache 、close
 * 、getConfiguration、getMapper 等等方法
 * 
 * 参考文档：https://blog.csdn.net/mouday/article/details/107307390
 */
public class App {
    public static void main(String[] args) throws Exception {
        personShow();
        userShow();
    }

    private static void personShow() {
        System.out.println("*************person*******************");
        PersonDao personDao = new PersonDaoImpl();
        // 建表
        personDao.dropTable();
        personDao.createTable();

        // 插入数据
        personDao.insert(new Person("曹操", 23));
        personDao.insert(new Person("刘备", 24));
        personDao.insert(new Person("孙权", 21));

        // 删除
        Integer deleteResult = personDao.deleteById(1);
        System.out.println(deleteResult);

        // 查询单个
        Person person = personDao.selectById(2);
        System.out.println(person);

        // 更新
        person.setAge(25);
        Integer updateResult = personDao.update(person);
        System.out.println(updateResult);

        List<Person> list = personDao.select(2, "刘备");
        for (Person p : list) {
            System.out.println(p);
        }
        // 查询所有
        list = personDao.selectAll();
        for (Person p : list) {
            System.out.println(p);
        }
    }

    private static void userShow() {
        System.out.println("*************user*******************");
        UserDao userDao = new UserDaoImpl();
        // 建表
        userDao.dropTable();
        userDao.createTable();

        // 插入数据
        userDao.insert(new User("曹操", 23));
        userDao.insert(new User("刘备", 24));
        userDao.insert(new User("孙权", 21));

        List<User> users = new ArrayList<User>();
        users.add(new User("关羽", 26));
        users.add(new User("赵云", 26));
        users.add(new User("张飞", 21));

        var insertsResult = userDao.inserts(users);// 多行插入
        System.out.println(insertsResult);

        insertsResult = userDao.insertUser(new User("韩信", 24));// 手动生成主键值，插入
        System.out.println(insertsResult);

        // 删除
        Integer deleteResult = userDao.deleteById(1);
        System.out.println(deleteResult);

        // 查询单个
        User user = userDao.selectById(2);
        System.out.println(user);

        // 更新
        user.setAge(25);
        Integer updateResult = userDao.update(user);
        System.out.println(updateResult);

        // 查询所有
        List<User> list = userDao.selectAll();
        for (User p : list) {
            System.out.println(p);
        }
    }
}
